import threading
import time

g_num = 0
def test1(temp):
    global g_num
    for i in range(temp):
        ''' 这样子上锁的语句比较少，越少越好，但要保证结果
            我这里可以但是视频中的不行。。
            https://www.bilibili.com/video/av56898207?p=9
            但也执行过程出了意外，test1的值出错了
            最终结果 test2  一定是不变的
        '''
        
        mutex.acquire()
        g_num += 1
        mutex.release()
    print('__test1  %s' % g_num)

def test2(temp):  
    global g_num
    for i in range(temp):
        mutex.acquire()
        g_num += 1
        mutex.release()
    print('__test2  %s' % g_num)
    
#  创建互斥锁，默认是没有上锁的
mutex = threading.Lock()

def main():

    t1 = threading.Thread(target=test1,args=(10000,)) #  如果是次数更多的话，结果
                                                    #  差距更大
    t2 = threading.Thread(target=test2,args=(10000,))
    t1.start()
    t2.start()

    time.sleep(2)
    print('__main  %s' % g_num)
if __name__ == '__main__':
    main()
